2相ロック Two-Phase Lock(2PL)
MySQLのSerializableの実装でもある
-- ISBN:978-4-87311-870-3 データ指向アプリケーションデザイン
MySQL(InnoDB)のSerializableはすべての行アクセスがロッキングリードになる
更新ならば排他ロック Exclusive Locks、selectならば共有ロック Shared Locks
さらにInnoDBはロッキングリードではMVCC(multi-version concurrency control)を使わない
ファントムリード phantom readsはネクストキーロック next-key lockで防ぐ
定義
すべてのトランザクションにおいて読み書きのために必要なすべてのロックが完了する以前にそれらがアンロックされることはない
-- ISBN:978-4781913902 リレーショナルデータベース入門
ロックしていくフェーズを成長相、アンロックしていくフェーズを縮退相
順法 legal
スケージュールがlegalとはすでに他のトランザクションがロックしているデータ項目を別のトランザクションがロックすることがない場合とする
ロック両立性行列 compatibility matrixに従っている
相反等価 conflict equivalent
スケジュールS1とS2が相反等価とは相反しているすべてのステップの順序がS1とS2で同一
相反直列化可能性 conflict serializable
スケジュールS1が相反直列化可能とはある直列スケジュールS2が存在していてS1とS2が相反等価のときをいう
もし各トランザクションが2PLに従うならば相反直列化可能なスケジュールのみが順法
2PLに従った順法なスケジュールは相反直列化可能性を保証するがデッドロック deadlockを発生させる
デッドロック検出 deadlock detection
厳格な2PL rigorous 2PL
トランザクションがコミットかロールバックに到達したらすべてアンロックする
多くの実装はこっちらしい
厳密な2PL strict 2PL
共有ロックについてはロックする必要がなくなった段階でアンロックする